package com.zmn.plat.persistence.interfaces.product;

import com.zmn.common.dto.StatusDTO;
import com.zmn.plat.model.entity.product.ServProductRelation;
import com.zmn.plat.model.entity.product.ServProductRelationQuery;
import com.zmn.plat.model.vo.product.relation.ServProductRelationVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author tanbiao
 * @description
 * @since 2019/9/20 11:48
 * @modifier
 **/
public interface ServProductRelationDAO {
    /**
     * 分页查询
     *
     * @param query 条件
     * @return
     */
    List<ServProductRelation> listPageByQuery(ServProductRelationQuery query);

    /**
     * 列表查询
     *
     * @param query 条件
     * @return
     */
    List<ServProductRelation> listByQuery(ServProductRelationQuery query);

    /**
     * 列表查询
     *
     * @param query 条件
     * @return
     */
    List<ServProductRelationVO> listByQueryFowShow(ServProductRelationQuery query);

    /**
     * 根据产品id查询关联关系
     *
     * @param productIds 条件
     * @return
     */
    List<ServProductRelationVO> listByProductIds(@Param("productIds") List<Integer> productIds);
    /**
     * 根据后台产品id查询对应的前台产品（后台产品必须为启用状态）
     *
     * @param productIds 条件
     * @return
     */
    List<ServProductRelationVO> listShowProductByProductIds(@Param("productIds") List<Integer> productIds);

    /**
     * 描述: 查询所有前台产品能与后台产品关联的产品id
     *
     *
     * @param status status
     * @return java.util.List<com.zmn.plat.model.entity.product.ServProductRelation>
     * @author jiafei
     * @since 2021/6/25 10:53
     */
    List<Integer> listProductIdByServProductStatus(@Param("status") Integer status);

    /**
     * 描述: 查询所有前台产品能与后台产品关联的产品id
     *
     *
     * @param bizType bizType
     * @return java.util.List<com.zmn.plat.model.entity.product.ServProductRelation>
     * @author jiafei
     * @since 2021/6/25 10:53
     */
    List<Integer> listProductIdByServProductBizType(@Param("bizType") Integer bizType);

    /**
     * 描述: 查询渠道开通的通用产品id和状态开启的渠道产品 id集合
     *  查询产品id集合
     *  查询的产品必须是前后太产品关联的产品 并且产品类型为：
     *      1、通用产品 则再相应查询的渠道中没用禁用通用产品(渠道开通的相应服务分类中开启了通用产品)
     *      2、渠道产品 判断产品的渠道id是查询的渠道id(channelId)
     *
     * @param channelId 渠道
     * @param status 产品状态(启用/禁用)
     * @return java.util.List<Integer>
     * @author jiafei
     * @since 2021/6/25 14:08
     */
    List<Integer> listProductIdByChannelIdAndStatus(@Param("channelId") Integer channelId,
                                                             @Param("status") Integer status);

    /**
     * 统计
     *
     * @param query 条件
     * @return
     */
    Integer countByQuery(ServProductRelationQuery query);

    /**
     * 更新
     *
     * @param query 条件
     * @return
     */
    Integer updateByKey(ServProductRelation query);
    /**
     * 批量修改状态
     *
     * @param dto 条件
     * @return
     */
    Integer updateStatusBatch(StatusDTO dto);
    /**
     * 批量修改
     *
     * @param relation
     * @param updateIds
     * @return
     */
    Integer updateBatch(@Param("relation") ServProductRelation relation,@Param("updateIds") List<Integer> updateIds);
    /**
     * 插入
     *
     * @param relation
     * @return
     */
    Integer insert(ServProductRelation relation);
    /**
     * 批量插入
     *
     * @param relations
     * @return
     */
    Integer insertBatch(@Param("relations") List<ServProductRelation> relations);

    /**
     * 批量删除
     *
     * @param ids 主键集合
     * @return
     */
    Integer deleteBatch(@Param("ids") List<Integer> ids);

    /**
     * 根据前台产品ID删除关联关系
     *
     * @param showProductId
     * @return
     */
    Integer deleteByShowProductId(@Param("showProductId") Integer showProductId);

}
